﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using RPXLib;
using RPXLib.Data;
using RPXLib.Interfaces;

namespace GrupyzServices.BdAccess
{
    public interface IClienteRepository
    {
        IEnumerable<Cliente> GetClientes();
        Cliente GetClienteById(int id);
        Cliente GetClienteByIdSocial(string idSocial,string email);
        DadosCliente GetDadosCliente(int id);
        LoginHeader GetLoginHeader(string id);
        bool UpdateCliente(DadosCliente SrcCliente, int DestClienteID);
        int InsertCliente(string userName, string password, string email);
        Cliente InsertClienteRPX(RPXAuthenticationDetails authenticationDetails);
        void UpdateTemNewsletter(string email, bool accao);
        Cliente GetClienteByEmail(string email, int id);
        Cliente GetClienteByEmailSocial(string email, string idSocial);
        SettingsViewModel GetClienteSettings(int idCliente);
        PremiosViewModel GetClientePremios(int idCliente);
        IEnumerable<ClienteComprasViewModel> GetComprasCliente(int idCliente);
        bool UpdateSettings(SettingsViewModel settings);
        void UpdateClienteOrder(DAL.Order order, int userId);
        bool UpdatePontos(int idCliente, bool Adiciona, int pontos = 1);
        Cliente GetClienteByEmail(string email);
        bool ValidateCliente(string email, string password);
        int MigrarClienteSocial(RPXAuthenticationDetails authenticationDetails);
        void ResetPassword(string email);
        bool ChangePassword(int idUser, string oldPassword, string newPassword);
        string GetReferencia(int idCliente);
        List<int> GetPontosCliente(int idCliente);
        bool UpdateOrderPontos(int idCliente, int pontos);
        bool UpdateReferencias(int idCliente, decimal? valor, bool jaComprou, bool negocioConcluido);
        Cliente GetClienteByReferencia(string referencia);
    }
}
